package com.sc.nft.service;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sc.nft.entity.SalvageEventsInfo;
import com.sc.nft.entity.UserCollection;
import com.sc.nft.entity.UserInfo;
import com.sc.nft.entity.vo.*;
import com.sc.nft.entity.vo.salvageEvents.SalvageEventsPageVO;
import com.sc.nft.entity.vo.salvageEvents.SalvageEventsScreenVO;
import com.sc.nft.enums.NFTProductShowSalvagePrefectureEnum;

import java.io.IOException;
import java.util.List;

/**
 * 分解活动藏品奖励表服务接口
 *
 * @author Sun
 * @since 2023-08-10 13:40:55
 * @description 由 Mybatisplus Code Generator 创建
 */
public interface SalvageEventsDetailsService {

    /**
     * 分页获取分解活动列表
     * @return
     */
    Page<SalvageEventsPageVO> getSalvageEventsPage(NFTProductShowSalvagePrefectureEnum showSalvagePrefecture,Integer pageNo, Integer pageSize);

    /**
     * 根据分解活动id获取用户收藏列表
     * @param id
     * @param pageNo
     * @param pageSize
     * @return
     */
    Page<UserCollectionBySalvageEventsIdVO> getUserCollectionBySalvageEventsId(Long id, UserInfo user, List<Long> collectionIds,Integer pageNo, Integer pageSize);

    /**
     * 根据分解活动id获取分解活动详情
     * @param id
     * @param user
     * @param userCollectionIds
     * @return
     */
    List<GetSalvageEventsRewardsVO> getSalvageEventsRewards(Long id, UserInfo user, List<Long> userCollectionIds);



    /**
     * 分解藏品
     * @param id
     * @param user
     * @param userCollectionIds
     * @return
     */
    List<GetSalvageEventsRewardsVO> salvageUserCollection(Long id, UserInfo user, List<Long> userCollectionIds,List<SalvageCardVO> cardInfo) throws IOException;

    /**
     * 分解记录
     * @param user
     * @param pageNo
     * @param pageSize
     * @return
     */
    Page<UserSalvageEventsRecordsVO> userSalvageEventsRecords(UserInfo user, Integer pageNo, Integer pageSize);

    /**
     * 获取分解活动的藏品列表
     * @param id
     * @return
     */
    List<SalvageEventsScreenVO> getSalvageEventsScreen(Long id);

    /**
     * 获取分解活动剩余次数
     * @param id
     * @return
     */
    SalvageUserCountVO getSalvageUserCount(UserInfo user,Long id);

    /**
     * 获取门票详情
     * @return
     */
    TicketDetailsVO getTicketDetails(UserInfo user);

    /**
     * 门票记录
     * @param user
     * @return
     */
    Page<TicketRecordsVO> getTicketRecords(UserInfo user, Page page);
}
